﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="IFile.cs" company="">
//   
// </copyright>
// <summary>
//   The File interface.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace Libium.Core
{
    using System.IO;
    using System.Threading.Tasks;

    /// <summary>
    ///   The File interface.
    /// </summary>
    public interface IFile
    {
        #region Public Methods and Operators

        /// <summary>
        ///   The get description.
        /// </summary>
        /// <returns> The <see cref="FileDescription" /> . </returns>
        FileDescription GetDescription();

        /// <summary>
        ///   The get description async.
        /// </summary>
        /// <returns> The <see cref="Task" /> . </returns>
        Task<FileDescription> GetDescriptionAsync();

        /// <summary>
        ///   The get path.
        /// </summary>
        /// <returns> The <see cref="string" /> . </returns>
        string GetPath();

        /// <summary>
        ///   The get path async.
        /// </summary>
        /// <returns> The <see cref="Task" /> . </returns>
        Task<string> GetPathAsync();

        /// <summary>
        ///   The get read stream.
        /// </summary>
        /// <returns> The <see cref="Stream" /> . </returns>
        Stream GetReadStream();

        /// <summary>
        ///   The get write stream.
        /// </summary>
        /// <returns> The <see cref="Stream" /> . </returns>
        Stream GetWriteStream();

        #endregion
    }
}